﻿<%@ Page Title="" Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeBehind="Scarico.aspx.cs" Inherits="FimetContoDeposito.Cliente.Scarico" %>

<%@ Register assembly="GrayParrot.Web.Controls" namespace="GrayParrot.Web.Controls" tagprefix="cc1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <asp:PlaceHolder ID="PlaceHolder1" runat="server">        
        <%: Scripts.Render("~/bundles/JQuery") %>          
        <%: Scripts.Render("~/bundles/JQueryUI") %>  
        <%: Styles.Render("~/bundles/Formly/css") %>
        <%: Scripts.Render("~/bundles/Formly") %>
		
        <%: Styles.Render("~/bundles/Datatables/css") %>
        <%: Scripts.Render("~/bundles/Datatables") %>
    </asp:PlaceHolder>

    <!-- Common -->
    <script type="text/javascript" lang="javascript" src="../Scripts/Formly/FormlyHelper.js"></script>
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.Core.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.AngularJS.Directives.Fileupload.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.AngularJS.Directives.DateTimePicker.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.AngularJS.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.DataTables.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.Modals.js"></script>

    <script type="text/javascript" lang="javascript" src="../Scripts/jquery.blockUI.js"></script>
    <script type="text/javascript" lang="javascript" src="../Scripts/bootbox.min.js"></script>      
    <!-- Common -->
</asp:Content>

<asp:Content ID="ContentSH" ContentPlaceHolderID="specialHead" runat="server">
    <style>
        /*.input-group-addon
        {  
           font-size:10px;
           height:20px;
           width:100%;
           padding:0px;
        }*/

        .col-xs-3
        {
            padding:2px;
        }
        .col-xs-10
        {
            padding:1px;
        }
        .col-xs-12
        {
            padding:1px;
        }
        .form-control
        {
            font-size:14px;
            padding:2px;
        }

        div#divContainer
        {
            padding:2px;
        }

        .bootbox {
            left: auto !important;
            width: auto !important;
            margin-left: auto !important;
            background-color: transparent !important;
            border: none !important;
            -webkit-box-shadow: none !important;
            box-shadow: none !important;
            position: relative !important;
            top: 50% !important;
            overflow: visible !important;
            transition: opacity 0.15s linear 0s !important;
        }
    </style>
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <!-- 
        Sitemap Menu item:
        <siteMapNode url="~/Scarico.aspx" title="Scarico" description="Scarico" image="fa-laptop" id="Scarico"/>
    -->
    <section class="panel">
	    <header class="panel-heading">
			<b>Ordine di Prelievo</b>
		</header>

        <iframe id='iframeCrud' frameborder="0" style="width:700px; height:600px; display:none"></iframe>
        <div id="crudDialog" title="" style="display:none"></div>

		<div class="panel-body">

            <!-- PUT YOUR CONTENT HERE -->
            <div class="row" ng-app="formlyExample" ng-controller="MainCtrl as vm" name="divContainer" id="divContainer">
			   <div class="col-md-6">
                    <div class="row">
                        <div ng-if="vm.loadingData.$$state.status === 0" style="margin:20px 0;font-size:2em">
                            <strong>Caricamento...</strong>
                        </div>
                        <div ng-if="vm.loadingData.$$status.state !== 0">
                            <form ng-submit="vm.onSubmit()" novalidate id="formlyForm">
                                <formly-form model="vm.model" fields="vm.fields" form="vm.form">
                                    <button type="sumbit" class="btn btn-primary submit-button" ng-disabled="vm.form.$invalid">Aggiungi</button>
                                </formly-form>
                            </form>
                            <%--<pre>{{vm.model | json}}</pre>--%>
                        </div>
                    </div>
                    <div class="row">
                        <img id="foto" class="img-thumbnail" ng-src="data:{{ vm.model.FotoProdotto.filetype }};base64,{{ vm.model.FotoProdotto.base64 }}" alt="Formly!" ng-show="vm.model.FotoProdotto" style="width:auto;height:auto;max-width:350px;max-height:100px" />
                        <img id="fotoDefault" class="img-thumbnail" src="http://placehold.it/350x150/7ba9d0/fff?text=Immagine+articolo+%3A%29" ng-hide="vm.model.FotoProdotto" style="width:auto;height:auto;max-width:350px;max-height:100px" />
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="row">
                        <cc1:JQDataTable ID="JQDTTable" runat="server" 
                                SelectionMode="Single" 
                                RenderScripts="false" 
                                IsResponsive="true"
                                BootstrapClasses="table table-hover table-bordered table-condensed">
                            <FeaturesConfig>
                                <Features>
                                    <cc1:Searching Value="none" />
                                    <cc1:AutoWitdh Value="true" />
                                    <cc1:ScrollY Value="400" ScrollCollapse="true" />
                                    <cc1:LengthChange Value="false" />
                                    <cc1:Paging PagingType="FullNumbers" PageLength="15" />
                                </Features>
                            </FeaturesConfig>
                            <ControllerConfig Url="" LoadingMode="Manual" />
                            <ColumnsConfig Key="Id">
                                <Columns>
                                    <cc1:TextColumn Name="Id" Header="Id" visible="false" />
                                    <cc1:TextColumn Name="A1Position" Header="Position" visible="false" />
                                    <cc1:TextColumn Name="IdArticolo" Header="IdArticolo" visible="false" />
                                    <cc1:TextColumn Name="DescrizioneArticolo" Header="Articolo" />
                                    <cc1:TextColumn Name="CodiceFornitore" Header="Cod. Forn." />
                                    <cc1:TextColumn Name="UMQta" Header="U.M.Grz." />
                                    <cc1:NumericColumn Name="Quantita" Header="Q.ta Grz." />
                                    <cc1:TextColumn Name="Note" Header="Note" />
                                    <cc1:TextColumn Name="Stato" Header="Stato" />
                                    <cc1:ActionColumn Header="Azioni">
                                        <Actions>
                                            <cc1:ActionIcon Icon="fa fa-search" Callback="ShowImage" />
                                            <cc1:ActionIcon Icon="fa fa-trash-o" Callback="CancellaArticolo" />
                                        </Actions>
                                    </cc1:ActionColumn>
                                </Columns>
                            </ColumnsConfig>
                            <Toolbar>
                                <cc1:IconButton Icon="fa fa-trash-o" Callback="CancellaTuttiArticoli" />
                                <cc1:IconButton Icon="fa fa-print" Callback="Stampa" />
                            </Toolbar>
                        </cc1:JQDataTable>
                    </div>
                </div>
             </div>
		</div>
	</section>

</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="LocaJavascript" runat="server">
<% HttpContext.Current.Response.Write(this.JQDTTable.RenderScriptsManually()); %>

<script type="text/javascript">
    var deMoment = moment();
    deMoment.lang('it')

    var m_rowPosition = 1;
    var m_id_movimento_scarico = null;
    var m_dialog = null;
    var settings = new FormlySettings();
    settings.container = '#divContainer';
    settings.shortcutCallback = DoSubmit;
    settings.setLoad(settings.createGetConfig('/api/MovimentiCliente/LoadFieldsMovimentoScarico'));

    FormlyManager(settings);

    jQuery(document).ready(function ($) {

    });

    /* */
    function AzzeraDati() {
        var model = extScope.vm.model;

        model.Articolo = 0;
        model.CodiceFornitore = '';
        model.Descrizione = '';
        model.Tipologia = '';
        model.SerieFamiglia = '';
        model.Dimensioni = '';
        model.NoteArticolo = '';
        model.Note = '';
        model.TotGiacenza = '';
        model.Impegnata = '';
        model.Disponibile = '';
        model.QtaFatt = '';

        $('.quantitaAOR').text('');
        $('.qtaFattAOR').text('');
        $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);

        extScope.vm.form.formly_1_asyncselect_Articolo_0.$viewValue = '';
        extScope.vm.form.formly_1_asyncselect_Articolo_0.$render();

        setTimeout(function () { $("#formly_1_asyncselect_Articolo_0").trigger("change"); }, 0, false);

        $('#formly_1_inputnumber_Quantita_2').text('');
        $('#formly_1_inputnumber_QtaFatt_3').text('');
        $('#formly_1_inputnumber_Quantita_2').val('');
        $('#formly_1_inputnumber_QtaFatt_3').val('');

        $(".img-thumbnail").attr("src", "http://placehold.it/350x150/7ba9d0/fff?text=Immagine+articolo+%3A%29");
    }

    function CancellaCodiceFornitore() {
        AzzeraDati();
    }

    function TrovaArticolo(options, scope) {
        var model = extScope.vm.model;

        var url = "/api/AnagraficaArticoli/GetArticoloByCodiceFornitore";

        $.ajax({
            global: false,
            type: "POST",
            url: url,
            data: JSON.stringify({ id: options }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var model = extScope.vm.model;

                if ((response != null) && (response !== undefined)) {
                    model.Articolo = response;

                    extScope.vm.form.formly_1_asyncselect_Articolo_0.$viewValue = response;
                    extScope.vm.form.formly_1_asyncselect_Articolo_0.$render();
                    //var id = 'string:' + response;
                    //$('#formly_1_asyncselect_Articolo_0').val(id);
                    $("#formly_1_asyncselect_Articolo_0").trigger("change");
                } else {
                    /* se un articolo è già selezionato, allora associo il codice selezionato all'articolo */
                    alert('Il codice indicato sarà associato all\'articolo selezionato !');
                }

                setTimeout(function () { extScope.$apply(); }, 0, false);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function CambiaFoto(options, scope) {
        var url = "/api/AnagraficaArticoli/GetDettaglio";

        if (options === undefined) {
            return;
        }

        $.ajax({
            global: false,
            type: "POST",
            url: url,
            data: JSON.stringify({ id: options }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var model = extScope.vm.model;

                if (response != null) {
                    $(".img-thumbnail").attr("src", response.FotoArticolo);
                    $('.quantitaAOR').text(response.DescrUnitaDiMisura);
                    $('.qtaFattAOR').text(response.DescrUMFatt);

                    model.Descrizione = response.Descrizione;
                    model.Tipologia = response.DescrTipologia;
                    model.SerieFamiglia = response.SerieFamiglia;
                    model.Dimensioni = response.Dimensioni;
                    model.NoteArticolo = response.Note;
                    model.CodiceFornitore = response.CodiceFornitore;
                    model.QuantitaPacco = response.QtaPacco;

                    $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);
                    if (response.CodiceFornitore != null) {
                        $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', true);
                    } else {
                        $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);
                    }

                    $('#formly_1_inputnumber_Quantita_2').text('');
                    $('#formly_1_inputnumber_QtaFatt_3').text('');
                    $('#formly_1_inputnumber_Quantita_2').val('');
                    $('#formly_1_inputnumber_QtaFatt_3').val('');

                    CalcolaQuantitaScarico(options, scope);
                } else {
                    model = null;
                    $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);

                    AzzeraDati();
                }

                setTimeout(function () { extScope.$apply(); }, 0, false);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function DoSubmit() {
        var model = extScope.vm.model;

        if (model.Articolo == '00000000-0000-0000-0000-000000000000') {
            alert('Seleziona articolo...');
            return;
        }

        if ((model.Quantita == 0) || (model.Quantita == null) || (model.Quantita === undefined)) {
            alert('Indicare la quantità...');
            return;
        }

        /* check scarico possibile */
        if (model.Quantita > model.Disponibile) {
            bootbox.alert({
                title: "Check Quantità",
                message: "Quantità disponibile insufficiente per evadere l'ordine di scarico.<br\>Inserire una quantità inferiore o verificare la quantità impegnata..."
            });
            return;
        }

        // scrivo il movimento di scarico nel db...
        if (m_id_movimento_scarico == null) {
            Salva_Dati_Documento_Scarico(model);
        } else {
            Salva_Elemento_Scarico(m_id_movimento_scarico, model);
        }
    }

    function Salva_Dati_Documento_Scarico(obj) {

        var movimentoBag = new Object();
        movimentoBag.NumeroDocumento = obj.NumeroDocumento;
        movimentoBag.DataDocumento = obj.DataDocumento;
        movimentoBag.TipoDocumento = obj.TipoDocumento;
        movimentoBag.DataMovimento = obj.DataMovimento;
        movimentoBag.Customer = obj.Customer;
        movimentoBag.DataConsegna = $('#formly_1_grayParrotDateTimePicker_DataConsegna_3').val();
        movimentoBag.RiferimentoCliente = obj.RiferimentoCliente;
        movimentoBag.Note = obj.Note;

        var url = '/api/Movimenti/SalvaDatiDocumentoScaricoCliente';

        var m_data = JSON.stringify({ data: movimentoBag });

        $.ajax({
            type: "POST",
            url: url,
            data: m_data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {

                var data = JSON.parse(response);

                m_id_movimento_scarico = data.Id;

                Salva_Elemento_Scarico(m_id_movimento_scarico, obj);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function Salva_Elemento_Scarico(idMovimento, obj) {
        var url = '/api/MovimentiCliente/SalvaElementoScarico';

        var m_data = JSON.stringify({ idMovimento: idMovimento, data: obj });

        $.ajax({
            type: "POST",
            url: url,
            data: m_data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                ShowResponseMessage(response);

                AggiungiElementoTabellaScarico(response.value, obj);

                AzzeraDati();
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function AggiungiElementoTabellaScarico(id, objModel) {
        var m_caricoItem = new Object();
        m_caricoItem.A1Position = m_rowPosition;
        m_caricoItem.Id = id;
        m_caricoItem.IdArticolo = objModel.Articolo;
        m_caricoItem.DescrizioneArticolo = objModel.Descrizione;
        m_caricoItem.IdCodiceFornitore = objModel.CodiceFornitore;
        m_caricoItem.CodiceFornitore = $('#formly_1_asyncselect_CodiceFornitore_1 option:selected').text();
        m_caricoItem.UMQta = $('.quantitaAOR').text();
        m_caricoItem.Quantita = objModel.Quantita;
        m_caricoItem.Note = objModel.NoteArticolo;

        m_tableJQDTTable.row.add(m_caricoItem).draw();

        m_rowPosition++;
    }

    function CancellaArticolo(obj) {
        var p = obj.IdArticolo;

        var item = null;
        var m_rowIndex = 0;
        var data = m_tableJQDTTable.rows().data();
        data.each(function (value, index) {
            if (value.IdArticolo == p) {
                item = value;
                m_rowIndex = index;
                return false;
            }
        });

        m_tableJQDTTable.row(m_rowIndex).remove().draw();

        Cancella_Elemento_Scarico(m_id_movimento_scarico, obj);
    }

    function CancellaTuttiArticoli() {
        m_tableJQDTTable.clear().draw();

        // chiama il metodo per cancellare tutti gli articoli di una lista di scarico
        Cancella_Elementi_Scarico(m_id_movimento_scarico);
    }

    /* cancella un singolo elemento della lista di movimento scarico */
    function Cancella_Elemento_Scarico(idMovimento, obj) {
        var url = '/api/Movimenti/CancellaElementoScarico';

        var m_data = JSON.stringify({ IdMovimento: idMovimento, data: obj });

        $.ajax({
            type: "POST",
            url: url,
            data: m_data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {

                $("#formly_1_asyncselect_Articolo_0").val("");
                $('#formly_1_inputnumber_Quantita_1').val("");

                ShowResponseMessage(response);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    /* cancella tutti gli elementi di una lista di movimento scarico */
    function Cancella_Elementi_Scarico(idMovimento) {
        var url = '/api/Movimenti/CancellaElementiScarico';

        var m_data = JSON.stringify({ IdMovimento: idMovimento });

        $.ajax({
            type: "POST",
            url: url,
            data: m_data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {

                $("#formly_1_asyncselect_Articolo_0").val("");
                $('#formly_1_inputnumber_Quantita_1').val("");

                ShowResponseMessage(response);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    /* elaborazione campi calcolati */
    function CalcolaQuantitaScarico(options, scope) {
        var url = "/api/Magazzino/CalcolaQuantitaArticolo";

        $.ajax({
            type: "POST",
            url: url,
            data: JSON.stringify({ id: options }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var model = extScope.vm.model;

                model.TotGiacenza = response.Totale_Giacenza;
                model.Impegnata = response.Impegnata;
                model.Disponibile = response.Disponibile;

                setTimeout(function () { extScope.$apply(); }, 0, false);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function CalcolaGiacenza(options, scope) {
        var url = "/api/Magazzino/CalcolaGiacenza";

        $.ajax({
            type: "POST",
            url: url,
            data: JSON.stringify({ id: options }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                $("#giacenzaDisponibileArticolo").text(response);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function Stampa() {
        if ((m_id_movimento_scarico == null) || (m_id_movimento_scarico === undefined)) {
            alert('Nessun movimento di scarico presente...');
            return;
        }

        var url = '/OperationReports/ReportTest.aspx?id=' + m_id_movimento_scarico + "&t=1";

        $("#iframeCrud").prop('src', url).appendTo("#crudDialog");
        $("#iframeCrud").show();

        m_dialog = $("#crudDialog").dialog({
            title: 'Ordine di prelievo',
            width: 'auto',
            height: 'auto',
            modal: true,
            close: function (response) {
                $("#iframeCrud").contents().remove();
                $('#iframeCrud').hide();
            }
        });
    }
</script>
</asp:Content>